import requests
import re

# 第一步 获取歌曲id
search_api = 'http://music.taihe.com/search'
keyword = {'key': '许嵩'}  # 搜索关键字，传递参数，通过字典构造
response = requests.get(search_api, params=keyword)  # 发送get请求
response.encoding = 'utf-8'  # 不用utf-8形式输出会有乱码
html = response.text  # 取出html源代码
# 找一段有规律有格式的歌曲id匹配文本，通过正则表达式获取歌曲id
ids = re.findall(r'{"sid":(\d+),"', html)
print(html)
print(ids)
# 第二步 获取歌曲信息
mp3_info_api = 'http://play.taihe.com/data/music/songlink'

# 把数据包装成一个字典
data = {
    'songIds': ','.join(ids),
    # 拼接参数，如：'121377633,252352,121911466,269431488,235725,589758719,596481670,597854185,595262'
    'hq': 0, 'type': 'm4a,mp3', 'rate': '', 'pt': 0,
    'flag': -1, 's2p': -1, 'prerate': -1, 'bwt': -1,
    'dur': -1, 'bat': -1, 'bp': -1, 'pos': -1, 'auto': -1,
}
res = requests.post(mp3_info_api, data=data)
info = res.json()  # 因为返回的数据是json格式，所以直接调用json()方法，转成字典

# 第三步 下载歌曲
song_info = info['data']['songList']  # 根据数据的结构，获取歌曲信息
for song in song_info:  # for循环获取歌曲
    # 根据网页中的数据结构获取信息
    song_name = song['songName']  # 歌名
    song_link = song['songLink']  # mp3地址
    for_mat = song['format']  # 格式
    lrc_link = song['lrcLink']  # 歌词地址

    # 下载歌曲
    # if song_link:  # 有可能没有地址
    #     song_response = requests.get(song_link)
    #     with open('%s.%s' % (song_name, for_mat), 'wb') as f:  # 写文件
    #         f.write(song_response.content)  # 歌曲是二进制信息，所以用content方法

    # 下载歌词
    if lrc_link:
        print(lrc_link)
        lrc_response = requests.get(lrc_link)
        with open("./文件/"  + "歌词t.lrc", mode="wb") as f:
            f.write(lrc_response.content)